package com.tencent.iov.cowin.befsale.clue.service.cus;

import com.tencent.iov.cowin.befsale.clue.controller.clue.vo.request.CusUnbindRequest;
import com.tencent.iov.cowin.befsale.clue.controller.clue.vo.response.CusUnbindResponse;
import com.tencent.iov.cowin.befsale.clue.controller.cus.vo.request.*;
import com.tencent.iov.cowin.befsale.clue.controller.cus.vo.response.CustomerResponse;
import com.tencent.iov.cowin.befsale.clue.controller.cus.vo.response.CustomerWithExtResponse;
import com.tencent.iov.cowin.befsale.clue.dao.http.mdquery.response.CustomerBaseResponse;
import com.tencent.iov.cowin.befsale.clue.domain.cus.po.DealerCustomer;
import com.software.boot.common.model.dao.PageRequest;
import com.software.boot.common.model.dao.PageResponse;
import com.tencent.iov.cowin.befsale.clue.controller.cus.vo.request.*;

import java.util.List;

/**
 * @Describe: 经销商客户表主表+客户好友关联表_Service接口层
 * @author: xiamu
 * @created: 2021-12-21 17:29:48
 * @version: 1.0
 */

public interface DealerCustomerService {

    /**
     * 通过ID获取详细信息
     *
     * @param id 主键ID
     * @return: DealerCustomer对象
     */
    CustomerResponse getDetailById(Long id);

    /**
     * 单条数据插入DealerCustomer
     *
     * @param request 经销商客户添加请求参数
     * @return 插入的条数
     */
    Long insert(AddDealerCustomerRequest request);

    /**
     * 批量插入DealerCustomer
     *
     * @param requests 经销商客户添加请求参数列表
     * @return 批量插入的条数
     */
    int insertBatch(List<DealerCustomer> requests);

    /**
     * 单条DealerCustomer更新
     *
     * @param request 经销商客户更新请求参数
     * @return 更新的条数
     */
    int update(UpdateCustomerRequest request);

    /**
     * 通过ID删除数据
     *
     * @param request 主键ID
     * @return 删除的条数
     */
    int delete(DeleteDealerCustomerRequest request);

    /**
     * 根据条件查询对象list列表
     *
     * @param request 查询参数
     * @return 查询结果
     */
    List<CustomerResponse> getListByParam(QueryCustomerRequest request);

    /**
     * 根据条件查询对象Page记录
     *
     * @param request 分页查询参数
     * @return 查询结果
     */
    PageResponse<DealerCustomer> getPageByParam(PageRequest<DealerCustomer> request);

    /**
     * 根据条件查询单个对象
     *
     * @param request 查询条件
     * @return 返回单个经销商客户对象
     */
    CustomerResponse getOneByParam(QueryCustomerRequest request);

    List<DealerCustomer> checkDealerCustomerPhone(DealerCustomer dealerCustomer);

    /**
     * 更新经销商客户信息
     *
     * @param updateCustomer 更新参数
     * @return 保存是否成功
     */
    Boolean updateDealerCustomer(UpdateCustomerRequest updateCustomer);

    /**
     * 查询顾客可绑定客户列表
     * @return 基本客户信息
     */
    List<CustomerBaseResponse> findCustomerBaseList();

    /**
     * 查询总部或者经销商跟进未绑定客户列表
     * @param cusUnbindRequest
     * @return
     */
    List<CusUnbindResponse> findOemOrDealerCusUnbind(CusUnbindRequest cusUnbindRequest);
    /**
     * 查询总部或者经销商跟进未绑定客户列表
     * @param cusUnbindRequest
     * @return
     */
    PageResponse<CusUnbindResponse> findOemOrDealerCusUnbindList(PageRequest<CusUnbindRequest> cusUnbindRequest);


    /**
     * 绑定客户
     *
     * @return 是否绑定成功
     */
    Boolean bindingCustomer(UpdateCustomerRequest updateCustomer);

    /**
     *  跟进外部联系人id查看是否已绑定
     * @param externalUserid 外部联系人ID
     * @return 返回客户客户绑定状态
     */
    Integer cusIsBinging(String externalUserid);

    /**
     * 获取经销商新息
     * @param dealerCustomer 参数
     * @return 经销商列表
     */
    List<DealerCustomer> checkDealerCustomerOneId(DealerCustomer dealerCustomer);

    /**
     * 获取客户转线索的数量
     * add by zly
     * 2022-01-15
     * @param clueDataRequest
     * @return
     */
    Long getEmpBindCount(ClueIntentionGradeDataRequest clueDataRequest);

    /**
     * 根据手机号查询客户信息
     * add by zly
     * 2022-01-18
     * @param request
     * @return
     */
    CustomerWithExtResponse getCustomerInfoWithPhone(QueryCustomerRequest request);

    /**
     * 跟进empid查询线索
     * @param empId
     * @return
     */
    Integer findClueByEmpId(Long empId);

    Boolean bindingCustomerTodo(UpdateCustomerRequest updateCustomer);
}